package com.zjw.forum.exception;

import com.zjw.forum.common.AppResult;
import com.zjw.forum.common.ResultCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
    //处理异常
    @ResponseBody
    @ExceptionHandler(ApplicationException.class)
    public AppResult ApplicationExceptionHandler(ApplicationException applicationException){
//        //打印异常栈 上生产环境要删除
//        applicationException.printStackTrace();
        //打印异常信息
        log.info(applicationException.getMessage());
        //已经有appResult了
        if(applicationException.getAppResult()!=null){
            return applicationException.getAppResult();
        }
        //没有appResult，使用message

        //判断message是否为null
        if(!StringUtils.hasLength(applicationException.getMessage())){
            //为空说明在new自定义异常时没有传错误信息，直接返回服务器错误
            return AppResult.failed(ResultCode.ERROR_SERVICES);
        }
        //message不为空 ，根据message封装AppResult
        return AppResult.failed(applicationException.getMessage());
    }

    @ResponseBody
    @ExceptionHandler(Exception.class)
    public AppResult ExceptionHandler(Exception e){
        //打印异常栈 上生产环境要删除
        e.printStackTrace();
        //打印异常信息
        log.info(e.getMessage());

        //没有appResult，使用message
        //判断message是否为null
        if(!StringUtils.hasLength(e.getMessage())){
            //为空说明在new自定义异常时没有传错误信息，直接返回服务器错误
            return AppResult.failed(ResultCode.ERROR_SERVICES);
        }
        //message不为空 ，根据message封装AppResult
        return AppResult.failed(e.getMessage());
    }
}
